package com.szh.zx.java8.day01;


import com.szh.zx.java8.POJO.Employee;

import java.util.Comparator;
import java.util.function.BiPredicate;
import java.util.function.Consumer;
import java.util.function.Supplier;

/**
 *
 * 方法引用：若lambda体中有方法已经实现了，我们可以使用“方法引用”
 * 主要有三种语法格式：、
 *  1：对象：：实例方法名
 *  2: 类：： 静态方法
 *  3， 类：：实例方法
*
* */
public class LambdMethodRefence {
	
	public void test1(){
		Consumer<String> consumer = System.out::println;
//	等价于 PrintStream ps = System.out ; Consumer<String> consumer = ps::println
	}
	
	public void test2(){
		Employee employee = new Employee();
		Supplier<String> sup=()->employee.getName();
		String s = sup.get();
		System.out.println(s);

		// 可以改写为
		Supplier<Integer> sup2 = employee::getAge;
	}
	// 类：：静态方法
	
	public void test3(){
		Comparator<Integer> comparator = (x,y)->Integer.compare(x,y);
		Comparator<Integer> comparator1 = Integer::compare;
	}
	// 类：：实例方法名
	
	public void test4(){
		BiPredicate<String,String> bip = (x,y)->x.equals(y);
		BiPredicate<String,String> bip2 = String::equals;

	}
	// lambda 构造器引用
	// 注意：函数式接口的参数列表要和接口抽象方法的参数列表保持一致
	// 调用的是无参构造器
	
	public void test5(){
		Supplier<Employee> sup = ()->new Employee();
		// 构造器引用
		Supplier<Employee> supplier = Employee::new;
		Employee employee = supplier.get();
		System.out.println(employee);
	}

}
